package views.mediators {
  import com.axon.base.managers.AxPopUpManager;
  import com.axon.dataservices.helpers.AxDSUtils;
  import com.axon.mvc.patterns.mediator.AxMediator;

  import flash.display.DisplayObject;

  import helpers.Verbs;

  import models.vo.Mercadoria;
  import models.vo.Pleito;
  import models.vo.ProdutoServico;
  import models.vo.SetorEconomico;

  import mx.utils.StringUtil;

  import views.components.PleitoPropCaracterizacao2View;

  public class PleitoPropCaracterizacao2Mediator extends AxMediator {

    public function PleitoPropCaracterizacao2Mediator(viewComponent:DisplayObject) {
      super(viewComponent);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function get view():PleitoPropCaracterizacao2View {
      return this.viewComponent as PleitoPropCaracterizacao2View;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    override protected function initialize():void {
      regResponseInterest(ProdutoServico, [Verbs.REGISTRAR_ANALISE]);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventViewCreated(body:Object):void {

      switch (body) {

        case view.adgBens:
          view.adgBens.dataProvider = Pleito(view.vo).getCaracterizacao().mercadorias;
          break;

        case view.adgDepreciaveis:
          view.adgDepreciaveis.dataProvider = Pleito(view.vo).getCaracterizacao().depreciaveis;
          break;

        case view.treeProdInsumo:
          view.allowEdition = view.allowEdition && Pleito(view.vo).emAnalise();

          view.vo = view.vo;
          view.treeData = Pleito(view.vo).getCaracterizacao().getProdInsumoTreeData();

          view.treeProdInsumo.validateNow();
          view.treeProdInsumo.selectedIndex = 0;
          view.treeProdInsumo.expandChildrenOf(view.treeProdInsumo.selectedItem, true);
          view.treeProdInsumo.setFocus();
          break;
      }
    }

    public function eventSelectionChange(body:Object):void {

      if ((!view.treeProdInsumo.selectedItem) || (view.treeProdInsumo.selectedItem.type == "root")) {
        view.vsProdInsumo.selectedIndex = 0;
      } else if (view.treeProdInsumo.selectedItem.type == "produto") {
        cloneSelectedProduto();
        view.vsProdInsumo.selectedIndex = 1;
//        view.selectedSetor = AppFacade.getInstance().models.setoresEconomicos.withId(view.selectedProduto.setorEconomico.id) as SetorEconomico;
      } else {
        var prod:ProdutoServico = Pleito(view.vo).getCaracterizacao().getProdutoServicoById(view.treeProdInsumo.selectedItem.produtoServico_id);
        view.selectedInsumo = prod.getInsumoById(view.treeProdInsumo.selectedItem.id) as Mercadoria;
        view.vsProdInsumo.selectedIndex = 2;
      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventFocusIn(body:Object):void {
//      switch (body) {
//        case view.txtArProdutoAnaliseDireito:
//
//          if ((StringUtil.trim(view.selectedProduto.analiseDireito) == "") && (!view.cbDireitoNegado.selected)) {
//            view.selectedProduto.analiseDireito = "Atende às condições legais ao direito do benefício.";
//            eventDataChange(view.txtArProdutoAnaliseDireito);
//          }
//          break;
//      }
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventDataChange(body:Object):void {
//      view.pbProdutoSalvar.enabled = view.allowEdition;
//      view.pbProdutoDescartar.enabled = view.allowEdition;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventDiscard(body:Object):void {
//      var prod:ProdutoServico = new ProdutoServico()
//      prod = Pleito(view.vo).getCaracterizacao().getProdutoServicoById(view.treeProdInsumo.selectedItem.id);
//      cloneSelectedProduto();
//      view.pbProdutoSalvar.enabled = false;
//      view.pbProdutoDescartar.enabled = false;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventRegistrarAnalise(body:Object):void {

//      if (StringUtil.trim(view.txtProdutoDescricao.text) == '') {
//        AxPopUpManager.messageDlg('A descrição do produto não pode ficar em branco.', 'Erro');
//        return;
//      } else if (!view.cmbSetorEconomico.selectedItem) {
//        AxPopUpManager.messageDlg('Informe o setor econômico para o produto.', 'Erro');
//        return;
//      } else if (StringUtil.trim(view.txtProdutoEnquadramento.text) == '') {
//        AxPopUpManager.messageDlg('Informe o enquadramento no setor econômico para o produto.', 'Erro');
//        return;
//      }
//
//      view.selectedProduto.descricaoAnalista = view.txtProdutoDescricao.text;
//      view.selectedProduto.setorEconomico = view.cmbSetorEconomico.selectedItem as SetorEconomico;
//      view.selectedProduto.enquadramento = view.txtProdutoEnquadramento.text;
//
//      if (view.txtArProdutoObsVistoria)
//        view.selectedProduto.obsVistoria = view.txtArProdutoObsVistoria.text;
//
//      if (view.txtArProdutoAnaliseDireito) {
//        view.selectedProduto.analiseDireito = view.txtArProdutoAnaliseDireito.text;
//        view.selectedProduto.direitoNegado = view.cbDireitoNegado.selected;
//      }
//
//      callController(ProdutoServico, Verbs.REGISTRAR_ANALISE, view.selectedProduto);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respProdutoServicoRegistrarAnaliseSuccess(sender:Object, body:Object, extraInfo:Object):void {
//      var prod:ProdutoServico = ProdutoServico(Pleito(view.vo).getCaracterizacao().getProdutoServicoById(view.treeProdInsumo.selectedItem.id));
//      var id:String = prod.id;

//			prod.descricaoAnalista	= view.txtProdutoDescricao.text;
//			prod.setorEconomico		= view.cmbSetorEconomico.selectedItem as SetorEconomico;

//      prod.descricaoAnalista = ProdutoServico(body).descricaoAnalista;
//      prod.setorEconomico = ProdutoServico(body).setorEconomico;
//
//      if (view.txtArProdutoObsVistoria)
//        prod.obsVistoria = ProdutoServico(body).obsVistoria;
//
//      if (view.txtArProdutoAnaliseDireito) {
//        prod.direitoNegado = ProdutoServico(body).direitoNegado;
//        prod.analiseDireito = ProdutoServico(body).analiseDireito
//      }
//
//      view.treeData = Pleito(view.vo).getCaracterizacao().getProdInsumoTreeData();
//
//      view.treeProdInsumo.validateNow();
//      view.treeProdInsumo.selectedIndex = 0;
//      view.treeProdInsumo.expandChildrenOf(view.treeProdInsumo.selectedItem, true);
//
//      selectTreeNode("produto", id);
//
//      cloneSelectedProduto();
//
//      view.pbProdutoSalvar.enabled = false;
//      view.pbProdutoDescartar.enabled = false;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respProdutoServicoRegistrarAnaliseFailure(sender:Object, body:Object, extraInfo:Object):void {
      view.errorString = "Falha no registro da análise do produto (provavelmente algum problema no servidor).";
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function cloneSelectedProduto():void {
      var prod:ProdutoServico = Pleito(view.vo).getCaracterizacao().getProdutoServicoById(view.treeProdInsumo.selectedItem.id) as ProdutoServico;
      view.selectedProduto = AxDSUtils.clone(prod) as ProdutoServico;
      view.selectedProduto.descricaoAnalista = (view.selectedProduto.descricaoAnalista != "") ? view.selectedProduto.descricaoAnalista : view.selectedProduto.descricao;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    private function selectTreeNode(type:String, id:String):void {
      var i:int = 0;

      while (true) {
        i++;
        view.treeProdInsumo.selectedIndex = i;
        if ((view.treeProdInsumo.selectedItem.type == type) && (view.treeProdInsumo.selectedItem.id == id))
          break;
      }
    }

  }
}